package com.qfmy.web.app.mapper.user;

import com.qfmy.model.entity.user.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author 清风明月
 * @Package com.qfmy.web.app.mapper.user
 * @date 2025/10/30
 * @description 用户mapper
 */
@Mapper
public interface UserMapper {

    /**
     * 获取用户信息
     * @param userId
     * @return
     */
    UserInfo getUserInfo(Long userId);

    /**
     * 更新用户信息
     *
     * @param userInfo
     * @return
     */
    int UpdateUserInfo(UserInfo userInfo);

    /**
     * 根据openid获取用户信息
     * @param openid
     * @return
     */
    UserInfo getUserInfoByOpenId(String openid);

    /**
     * 插入用户信息
     * @param userInfo
     */
    void InsertUserInfo(UserInfo userInfo);

    /**
     * 更新用户余额
     * @param userId
     */
    @Update("update user_info set balance = balance + #{account} where user_id = #{userId}")
    void updateAccount(Long userId, BigDecimal account);

    /**
     * 获取用户用户喜欢的书籍的类型
     * @param userId
     * @return
     */
    @Select("select like_type from user_info where user_id = #{userId}")
    String getUserLikeType(Long userId);

    /**
     * 减少用户点赞的数量
     * @param publishUserId
     */
    @Update("update user_info set like_count = like_count - 1 where user_id = #{publishUserId}")
    void updateLikeCountReduce(Long publishUserId);

    /**
     * 增加用户点赞数量
     * @param commentUserId
     */
    @Update("update user_info set like_count = like_count + 1 where user_id = #{commentUserId}")
    void updateLikeAdd(Long commentUserId);

    /**
     * 更新用户今日阅读时长
     * @param todayReadTime
     * @param userId
     */
    @Update("update user_info set read_time = read_time + #{todayReadTime} where user_id = #{userId}")
    void updateTodayReadTime(BigDecimal todayReadTime, Long userId);

    /**
     * 更新用户今日听书时长
     * @param todayReadTime
     * @param userId
     */
    @Update("update user_info set listen_time = listen_time + #{todayReadTime} where user_id = #{userId}")
    void updateTodayListenTime(BigDecimal todayReadTime, Long userId);

    /**
     * 获取用户信息
     * @return
     */
    @Select("select * from user_info where phone = #{phone}")
    UserInfo getUserInfoByPhone(String phone);

    /**
     * 获取所有用户信息
     * @return
     */
    List<UserInfo> getAllUsers();

    /**
     * 批量更新用户的vip状态
     * @param userIds
     */
    void updateUserVipStatus(List<Long> userIds);

}
